home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / loadsaveproject.fpl < prev    next >
Text File  |  1996-11-16  |  5KB  |  246 lines

  1. /*
  2.  * SaveProject - saves all open buffers as a project file
  3.  *
  4.  * Written by Mathias Axelsson (c) 940715
  5.  *
  6.  * All info is saved in a selected file.
  7.  *
  8.  * First comes a line of info (starting with #).
  9.  * Second comes a line with (width, height, x, y position of window).
  10.  * After that comes several lines with:
  11.  * <full filename> <line> <byte position> <tab size>
  12.  *
  13.  */
  14.  
  15. export void SaveProject(void)
  16. {
  17.     int firstid = NextBuffer();
  18.     string tmp, outfile;
  19.     int tal, id=0;
  20.     string projectname, dir;
  21.  
  22.     dir = ReadInfo("Project_dir");
  23.     if (!strlen(dir))
  24.         dir = "FrexxEd:projects/";
  25.     else
  26.         if (dir[strlen(dir) - 1] != '/')
  27.             dir = dir + "/";
  28.  
  29.     projectname = PromptFile(dir, "Save project:", "#?.prj");
  30.  
  31.     if (strlen(projectname))
  32.     {
  33.         outfile = "# full_file_name line byte_position tab_size window;\n";
  34.         id = firstid;
  35.                 
  36.         tal = ReadInfo("window_width", id);
  37.         outfile = joinstr(outfile, itoa(tal), " ");
  38.         tal = ReadInfo("window_height", id);
  39.         outfile = joinstr(outfile, itoa(tal), " ");
  40.         tal = ReadInfo("window_xpos", id);
  41.         outfile = joinstr(outfile, itoa(tal), " ");
  42.         tal = ReadInfo("window_ypos", id);
  43.         outfile = joinstr(outfile, itoa(tal), " ");
  44.         tal = ReadInfo("window", id);
  45.         outfile = joinstr(outfile, itoa(tal), " ;\n");
  46.  
  47.         do {
  48.             if (ReadInfo("type", id) & 1)
  49.             {
  50.                 tmp = ReadInfo("full_file_name", id);
  51.                 if (strlen(tmp))
  52.                 {
  53.                     outfile = joinstr(outfile, "\"", tmp, "\"", " ");
  54.                     tal = ReadInfo("line", id);
  55.                     outfile = joinstr(outfile, itoa(tal), " ");
  56.                     tal = ReadInfo("byte_position", id);
  57.                     outfile = joinstr(outfile, itoa(tal), " ");
  58.                     tal = ReadInfo("tab_size", id);
  59.                     outfile = joinstr(outfile, itoa(tal), " ;\n");
  60.                 }
  61.             }
  62.             
  63.             id = NextBuffer(id);
  64.             
  65.             if (id == firstid)
  66.                 id = 0;
  67.             
  68.         } while (id);
  69.         
  70.         if (SaveString(projectname, outfile))
  71.             Request("Error writing project file!", "Error message", "OK");
  72.     }
  73.     else
  74.         ReturnStatus(GetReturnMsg(GetErrNo()));
  75. }
  76.  
  77. /*
  78.  * LoadProject - Loads a project file and open buffers
  79.  *
  80.  * Written by Mathias Axelsson (c) 940715
  81.  *
  82.  * Loads the seleted project file and sets the window width, height
  83.  * x and y position. Then it opens all the files and sets line, byte
  84.  * position and tab size.
  85.  *
  86.  */
  87.  
  88. export void LoadProject(void)
  89. {
  90.     int id, i, j, first = 1, x, y, w, h, win, id1=0;
  91.     string infile, tmp;
  92.  
  93.     string projectname, dir;
  94.  
  95.     dir = ReadInfo("Project_dir");
  96.     if (!strlen(dir))
  97.         dir = "FrexxEd:projects/";
  98.     else
  99.         if (dir[strlen(dir) - 1] != '/')
  100.             dir = dir + "/";
  101.  
  102.     projectname = PromptFile(dir, "Load project:", "#?.prj");
  103.     
  104.     if (strlen(projectname) >= 4)
  105.         if (stricmp(substr(projectname, strlen(projectname)-4, 4), ".prj"))
  106.             projectname = projectname + ".prj";
  107.     
  108.     if (strlen(projectname))
  109.     {
  110.         infile = LoadString(projectname);
  111.         if (strlen(infile))
  112.         {
  113.             if (strlen(infile) == 0)
  114.             {
  115.                 Request("Error reading project file!", "Error message", "OK");
  116.                 return;
  117.             }
  118.  
  119.             if (strncmp(infile, "#", 1))
  120.             {
  121.                 Request("This is not a project file!", "Error message", "OK");
  122.                 return;
  123.             }
  124.  
  125.             i = strstr(infile, ";");
  126.             if (i < 0)
  127.                 return;
  128.  
  129.             infile = substr(infile, i + 2, 10000);
  130.  
  131.             j = strstr(infile, " ");
  132.             tmp = substr(infile, 0, j);
  133.             infile = substr(infile, j + 1, 10000);
  134.             w = atoi(tmp);
  135.  
  136.             j = strstr(infile, " ");
  137.             tmp = substr(infile, 0, j);
  138.             infile = substr(infile, j + 1, 10000);
  139.             h = atoi(tmp);
  140.  
  141.             j = strstr(infile, " ");
  142.             tmp = substr(infile, 0, j);
  143.             infile = substr(infile, j + 1, 10000);
  144.             x = atoi(tmp);
  145.  
  146.             j = strstr(infile, " ");
  147.             tmp = substr(infile, 0, j);
  148.             infile = substr(infile, j + 1, 10000);
  149.             y = atoi(tmp);
  150.  
  151.             j = strstr(infile, " ");
  152.             tmp = substr(infile, 0, j);
  153.             infile = substr(infile, j + 3, 10000);
  154.             win = atoi(tmp);
  155.  
  156.             SetInfo(id, "window_width", w, "window_height", h, "window_xpos", x, "window_ypos", y, "window", win);
  157.  
  158.             for (;;)
  159.             {
  160.                 if (strlen(infile) == 0)
  161.                     break;
  162.  
  163.                 infile = substr(infile, 1, 1000);
  164.                 j = strstr(infile, "\"");
  165.                 tmp = substr(infile, 0, j);
  166.                 infile = substr(infile, j + 2, 10000);
  167.  
  168.                 if (first)
  169.                 {
  170.                     id = GetBufferID();
  171.  
  172.                     if (strlen(ReadInfo("file_name", id)) != 0 ||
  173.                          ReadInfo("changes", id) != 0)
  174.                     {
  175.                         if (!id1)
  176.                             id = New();
  177.                         else
  178.                             id = id1;
  179.                         
  180.                         if (!id)
  181.                         {
  182.                             Request("Can't create new buffer", "Error message", "OK");
  183.                             return;
  184.                         }
  185.                     }
  186.  
  187.                     first = 0;
  188.                 }
  189.                 else
  190.                 {
  191.                     if (!id1)
  192.                         id = New();
  193.                     else
  194.                         id = id1;
  195.                     
  196.                     if (!id)
  197.                     {
  198.                         Request("Can't create new buffer", "Error message", "OK");
  199.                         return;
  200.                     }
  201.                 }
  202.  
  203.                 id1 = id;
  204.                 CurrentBuffer(id);
  205.  
  206.                 if (Load(tmp) < 0)
  207.                 {
  208.                     Request("Error loading file!", "Error message", "OK");
  209.                     j = strstr(infile, ";");
  210.                     infile = substr(infile, j + 2, 10000);
  211.                 }
  212.                 else
  213.                 {
  214.                     j = strstr(infile, " ");
  215.                     tmp = substr(infile, 0, j);
  216.                     infile = substr(infile, j + 1, 10000);
  217.  
  218.                     y = atoi(tmp);
  219.  
  220.                     j = strstr(infile, " ");
  221.                     tmp = substr(infile, 0, j);
  222.                     infile = substr(infile, j + 1, 10000);
  223.  
  224.                     x = atoi(tmp);
  225.  
  226.                     GotoLine(y, x);
  227.  
  228.                     j = strstr(infile, " ");
  229.                     tmp = substr(infile, 0, j);
  230.                     infile = substr(infile, j + 1, 10000);
  231.  
  232.                     SetInfo(id, "tab_size", atoi(tmp));
  233.  
  234.                     j = strstr(infile, ";");
  235.                     infile = substr(infile, j + 2, 10000);
  236.                 
  237.                     id1 = 0;
  238.                 }
  239.             }
  240.             
  241.             if (id1 && ReadInfo("changes", id1) == 0)
  242.                 Kill(id1);
  243.         }
  244.     }
  245. }
  246.